package com.demo.java.OD351_400.OD366;

import java.util.HashSet;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【补种未成活胡杨树(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146225728
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取输入数据
        int n = scanner.nextInt();  // 总树木数量
        int m = scanner.nextInt();  // 未成活树木数量
        HashSet<Integer> deadTrees = new HashSet<>();
        for (int i = 0; i < m; i++) {
            deadTrees.add(scanner.nextInt());  // 未成活树木编号
        }
        int k = scanner.nextInt();  // 最大可补种的树木数量

        // 使用滑动窗口法，计算最多能得到的连续胡杨树
        int left = 0, right = 0, currentDead = 0, maxLength = 0;

        while (right < n) {
            // 如果当前树是未成活的树，增加补种数
            if (deadTrees.contains(right + 1)) {
                currentDead++;
            }

            // 如果当前窗口内补种的树木数超过K，左指针右移，缩小窗口
            while (currentDead > k) {
                if (deadTrees.contains(left + 1)) {
                    currentDead--;
                }
                left++;
            }

            // 更新最大长度
            maxLength = Math.max(maxLength, right - left + 1);
            right++;
        }

        // 输出结果
        System.out.println(maxLength);
    }
}